# Versión de R
R.version.string[1] "R version 4.3.0 (2023-04-21 ucrt)"
FIESTA es un paquete de R para análisis de datos de inventarios forestales basados en muestras. Es desarrollado por el Programa de Inventario y Análisis Forestal (FIA, por sus siglas en inglés) del Servicio Forestal del Departamento de Agricultura de los Estados Unidos.
Este documento describe el procesamiento, mediante FIESTA, de un conjunto de datos de parcelas de monitoreo, ubicadas en la zona norte de Costa Rica.
Para trabajar con FIESTA debe instalar:
Puede utilizar otros ambientes de desarrollo. Una opción muy popular en la actualidad es Visual Studio Code.
De acuerdo con su documentación, la versión mínima de R que requiere FIESTA, a la fecha de escritura de este documento (2023-09-11), es la 4.2.0. Puede consultar la versión que tiene instalada al ejecutar el siguiente comando en la consola de R:
# Versión de R
R.version.string[1] "R version 4.3.0 (2023-04-21 ucrt)"
La salida del comando anterior debe indicar que su versión de R es mayor o igual a 4.2.0.
El paquete FIESTA está disponible en Para usar FIESTA, el paquete debe instalarse primero en una interfaz de R. Puede utilizar la función install.packages():
# Instalación del paquete FIESTA
install.packages("FIESTA")El resultado de la instalación puede verificarse al cargar el paquete con la función library().
# Carga del paquete FIESTA
library(FIESTA)Si el comando anterior no genera ningún mensaje de error, el paquete FIESTA debe haberse instalado adecuadamente.
Además de FIESTA, se recomienda instalar los siguientes paquetes para procesamiento de datos y visualización de resultados.
# Paquete para el desarrollo de documentos computacionales
install.packages("rmarkdown")
# Colección de paquetes para análisis de datos
install.packages("tidyverse")
# Estilos para gráficos de tidyverse
install.packages("ggthemes")
# Paquete para limpieza de datos
install.packages("janitor")
# Paquete para tablas interactivas
install.packages("DT")
# Paquete para graficación interactiva
install.packages("plotly")
# Paquete para gráficos de Sankey
install.packages("networkD3")
# Paquete para mapas interactivos
install.packages("leaflet")
# Funciones adicionales para leaflet
install.packages("leaflet.extras")
# Funciones adicionales para leaflet
install.packages("leafem")Luego de instalarlos, debe cargar los paquetes con la función library().
# Carga de paquetes adicionales
library(rmarkdown)
library(tidyverse)
library(ggthemes)
library(janitor)
library(DT)
library(plotly)
library(networkD3)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(sf) # se instala con FIESTALos datos de puntos de muestreo se cargan de un archivo CSV y los nombres de las columnas se “limpian” para evitar números al inicio y otros problemas que dificultan su manejo.
# Ruta a los datos
ruta_archivo_puntos <- "datos/Resul_Fin_2Grupos_SinReplicas_csv_Fix.csv"
# Carga de datos de puntos de muestreo
puntos <- read_delim(ruta_archivo_puntos)
# Limpieza de los nombres de columnas
puntos <- clean_names(puntos)
# Coversión a de t1_cobertura y t2_cobertura a factores
puntos <-
puntos |>
mutate(
t1_cobertura = factor(t1_cobertura, levels = unique(t1_cobertura)),
t2_cobertura = factor(t2_cobertura, levels = unique(t2_cobertura))
)# Despliegue de los datos de puntos de muestreo en una tabla
puntos |>
select(plot_id, sample_id, t1_cobertura, t2_cobertura) |>
datatable(
caption = "Puntos de muestreo de cobertura y uso de la tierra",
rownames = FALSE,
colnames = c("plot_id", "sample_id", "t1_cobertura", "t2_cobertura"),
options = list(
pageLength = 5,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
)
)# Gráfico de barras ggplot2
grafico_barras <-
puntos |>
ggplot(aes(x = fct_infreq(t1_cobertura))) +
geom_bar(
aes(
text = paste0(
"Cantidad de puntos: ", after_stat(count)
)
)
) +
ggtitle("Distribución de cobertura en t1") +
xlab("Cobertura") +
ylab("Cantidad de puntos") +
theme_clean() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Gráfico de barras plotly
ggplotly(grafico_barras, tooltip = "text") |>
config(locale = 'es')# Total de puntos
conteo <- puntos |>
count(t1_cobertura)
# Gráfico de pastel plotly
plot_ly(conteo, labels = ~ t1_cobertura, values = ~ n) |>
add_pie() |>
layout(title = "Distribución de cobertura en t1")# Gráfico de barras ggplot2
grafico_barras <-
puntos |>
ggplot(aes(x = fct_infreq(t2_cobertura))) +
geom_bar(
aes(
text = paste0(
"Cantidad de puntos: ", after_stat(count)
)
)
) +
ggtitle("Distribución de cobertura en t2") +
xlab("Cobertura") +
ylab("Cantidad de puntos") +
theme_clean() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Gráfico de barras plotly
ggplotly(grafico_barras, tooltip = "text") |>
config(locale = 'es')# Total de puntos
conteo <- puntos |>
count(t2_cobertura)
# Gráfico de pastel plotly
plot_ly(conteo, labels = ~ t2_cobertura, values = ~ n) |>
add_pie() |>
layout(title = "Distribución de cobertura en t1")geo_puntos <-
puntos |>
select(plot_id, sample_id, lon, lat, t1_cobertura, t2_cobertura) |>
st_as_sf(
coords = c("lon", "lat"),
crs = 4326
)
leaflet() |>
addTiles(group = "OSM") |>
addProviderTiles(
provider = providers$Esri.WorldImagery,
group = "ESRI World Imagery"
) |>
addCircleMarkers(
data = geo_puntos,
radius = 0.05,
clusterOptions = markerClusterOptions(),
popup = paste(
paste0("<strong>Parcela: </strong>", geo_puntos$plot_id),
paste0("<strong>Muestra: </strong>", geo_puntos$sample_id),
paste0("<strong>Cobertura en t1: </strong>", geo_puntos$t1_cobertura),
paste0("<strong>Cobertura en t2: </strong>", geo_puntos$t2_cobertura),
sep = '<br/>'
),
) |>
addLayersControl(
baseGroups = c("OSM", "ESRI World Imagery")
)# Transposición de datos de puntos a porcentajes de coberturas por parcela en t1
pctfrompnt_t1 <- datPBpnt2pct(puntos, uniqueid="plot_id", tvar="t1_cobertura")# Despliegue de la transposición de puntos a porcentajes en t1
pctfrompnt_t1 |>
datatable(
caption = "Porcentajes de coberturas por parcela en t1",
rownames = FALSE,
options = list(
pageLength = 5,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
)
)# Transposición de datos de puntos a porcentajes de coberturas por parcela en t2
pctfrompnt_t2 <- datPBpnt2pct(puntos, uniqueid="plot_id", tvar="t2_cobertura")# Despliegue de la transposición de puntos a porcentajes en t2
pctfrompnt_t2 |>
datatable(
caption = "Porcentajes de coberturas por parcela en t2",
rownames = FALSE,
options = list(
pageLength = 5,
language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
)
)